class Solution {
public:
    int getNext(int x) {
        int d, y = 0;
        while (x) {
            d = x % 10;      // 取 x 的最后一位数字
            x = x / 10;      // 去掉 x 的最后一位数字
            y = y + d * d;   // 将最后一位数字的平方加到 y 中
        }
        return y;
    }

    bool isHappy(int n) {
        int p = n; // 快指针
        int q = n; // 慢指针

        while (p != 1) { // 当快指针不等于 1 时循环
            q = getNext(q);          // 慢指针走一步
            p = getNext(getNext(p)); // 快指针走两步

            if (p == q) { // 如果快慢指针相遇
                return p == 1; // 判断是否是因为 p == 1 而相遇
            }
        }

        return true; // 快指针 p 已经等于 1，说明是快乐数
    }
};